package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.FragmentoHorario;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class DAOHorario {
    
    public final String TABLA_HORARIO = "horarios";
    public final String COLUMNA_CLAVE_HORARIO = "claveHorario";
    public final String COLUMNA_DIA = "dia";
    public final String COLUMNA_HORA_INICIO = "horaInicio";
    public final String COLUMNA_HORA_FIN = "horaFin";
    public final String COLUMNA_AULA = "aula";
    public final String COLUMNA_CLAVE_ASIGNATURA_O_A = "clave_asig_o_a";
    private Connection conexion = null;
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    
    public DAOHorario(){
        this.conexion = this.acceso.abrirConexion();
    }
    
    public void cerrarConexionAHorario() {
        acceso.cerrarConexion(conexion);
    }
    
    public ArrayList<FragmentoHorario> buscarTodosLosHorarios(int claveAsignaturaOferta){
        String queryBusqueda = "SELECT * FROM "+TABLA_HORARIO+ " WHERE " + COLUMNA_CLAVE_ASIGNATURA_O_A + " = " + claveAsignaturaOferta;
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            ResultSet resultado = sentencia.executeQuery(queryBusqueda);
            resultado.last();
            int resultSetSize = resultado.getRow();
            if(resultSetSize > 0){
                ArrayList<FragmentoHorario> listaHorarios = new ArrayList<FragmentoHorario>();
                resultado.first();
                while(resultado.getRow() != 0){//Mientras no se llegue a la ultima linea
                    FragmentoHorario actual = new FragmentoHorario();
                    actual.setClaveFragmentoHorario(resultado.getInt(1));
                    actual.setDiaSemana(resultado.getString(2));
                    actual.setHoraInicio(resultado.getString(3));
                    actual.setHoraFin(resultado.getString(4));
                    actual.setAula(resultado.getString(5));
                    listaHorarios.add(actual);
                    resultado.next();
                }
                resultado.close();
                return listaHorarios;
            }else{
                return new  ArrayList<FragmentoHorario> ();
            }
        } catch (SQLException ex) {
            System.err.println("Problemas de SQL:\n"+ex.toString());
            return new  ArrayList<FragmentoHorario> ();
        }
    }
    
    public void registrarHorario(int claveAsignaturaOferta, FragmentoHorario horario){
        try {
           
                String dia = horario.getDiaSemana();
                String horaInicio = horario.getHoraInicio();
                String horaFin = horario.getHoraFin();
                String aula = horario.getAula();

                Statement sentencia = acceso.crearSentenciaBD(conexion);
                String queryInsertar = "INSERT INTO " + TABLA_HORARIO + " ("
                        + COLUMNA_DIA +","
                        + COLUMNA_HORA_INICIO +","
                        + COLUMNA_HORA_FIN +","
                        + COLUMNA_AULA +","
                        + COLUMNA_CLAVE_ASIGNATURA_O_A
                        + ") VALUES ('"
                        +dia+"','"
                        +horaInicio+"','"
                        +horaFin+"','"
                        +aula+"',"
                        +claveAsignaturaOferta+")";

                sentencia.executeUpdate(queryInsertar);
            
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de registrar el Horario");
        }
    }
    
    public void eliminarHorario(int claveHorario) {
    try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_HORARIO + " WHERE " + COLUMNA_CLAVE_HORARIO + " = '" + claveHorario + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar el Horario");
        }
    }
    
    public void eliminarHorarioPorAsignatura(int claveAsignatura) {
    try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_HORARIO + " WHERE " + COLUMNA_CLAVE_ASIGNATURA_O_A + " = '" + claveAsignatura + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar el Horario");
        }
    }
    
    public void actualizarHorario(int claveHorario, FragmentoHorario horario) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryUpdate = "UPDATE " + TABLA_HORARIO + " SET "
                    + COLUMNA_CLAVE_HORARIO + " = '" + horario.getClaveFragmentoHorario() + "' ,"
                    + COLUMNA_DIA + " = '" + horario.getDiaSemana() +"' ,"
                    + COLUMNA_HORA_INICIO + " = '" + horario.getHoraInicio() +"' ,"
                    + COLUMNA_HORA_FIN + " = '" + horario.getHoraFin() +"' ,"
                    + COLUMNA_AULA + " = '" + horario.getAula() +"' "
                    + " WHERE " + COLUMNA_CLAVE_HORARIO+ " = '" + claveHorario + "'"
                    + ";";
            sentencia.executeUpdate(queryUpdate);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de actualizar los datos del Horario");
        }
    }
    
    public void eliminarTodosLosHorarios(){
          try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryDelete = "DELETE FROM " + TABLA_HORARIO ;
            sentencia.executeUpdate(queryDelete);
        } catch (SQLException ex) {
            ex.printStackTrace();
            System.out.println("Ocurrió un problema al tratar de actualizar los datos de una Asignatura de Oferta Academica");
        }
    }
}
